#include <iostream>
using namespace std;

const int N = 100010;
int node[N][26], num[N], idx;
char op[2], s[N];
int m;

void insert(char str[]) //添加新的字符串
{
    int p = 0;                           //从根节点开始
    for (int i = 0; str[i] != '\0'; ++i) //遍历整个字符串
    {
        int u = str[i] - 'a';   //取得这个字母对应的编号
        if (node[p][u] == 0)    //如果不存在
            node[p][u] = ++idx; //就创建一个
        p = node[p][u];         //然后移步到下一个字母
    }
    ++num[p]; //最后在最后一个字母处添加一道结束标记
    return;
}

int query(char str[])
{
    int p = 0;                           //从根节点开始
    for (int i = 0; str[i] != '\0'; ++i) //遍历给的整个字符串
    {
        int u = str[i] - 'a'; //找到对应编号接口
        if (node[p][u] == 0)  //如果不存在
            return 0;         //就是找不到，直接返回0
        p = node[p][u];       //存在就接着走下去
    }
    return num[p]; //最后这个字符串有几个也是有记录的
}

int main()
{
    cin >> m;
    while (m--)
    {
        cin >> op;
        if (op[0] == 'I')
        {
            cin >> s;
            insert(s);
        }
        else
        {
            cin >> s;
            printf("%d\n", query(s));
        }
    }
    return 0;
}